﻿using System.Collections;
using System.Xml;

namespace Narau.Common
{
    //------------------------------------------------------------------------------
    // Almacena los resultados de lso ejercicios hechos por un determinado usuario
    //------------------------------------------------------------------------------
    class ScoreTable
    {
        private ArrayList     m_ResultList;
        private XML_data_info m_XML;
        
        //----------------------------------------
        // Constructor: a partir del fichero XML
        //----------------------------------------
        public ScoreTable(string nScoreFile)
        {
            m_ResultList = new ArrayList();

            m_XML.xml_doc = new XmlDocument();
            m_XML.xml_doc.Load(nScoreFile);
            m_XML.name_file = nScoreFile;

            XmlNode xml_list_result = m_XML.xml_doc.SelectSingleNode("score_list");
            foreach (XmlNode xml_result in xml_list_result.ChildNodes)
            {
                if (xml_result.Name == "result")
                {
                    MondaiResult new_result = new MondaiResult();
                    new_result.LoadData(xml_result);
                    m_ResultList.Add(new_result);
                }
            }
        }

        //--------------------------------------------------------------
        // Actualiza el fichero XML con los datos actuales de la tabla
        //--------------------------------------------------------------
        public void UpdateFile()
        {
            m_XML.xml_doc.Save(m_XML.name_file);
        }

        //------------------------------------------------------------------------------------------------------
        // Enlaza un ejercicio con un resultado, que almacenará los datos estadísticos de resolución del mismo
        // Busca en la lista de resultados si hay alguno cuyo UID coincide con el del ejercicio
        // - Si lo hay se enlaza con ese
        // - Si no lo hay se crea un nuevo resultado para ese ejercicio y se le asigna el UID del ejercicio
        //------------------------------------------------------------------------------------------------------
        public void SyncMondai(Mondai inMondai)
        {
            bool bYa = false;

            foreach (MondaiResult iT_result in m_ResultList)
            {
                if (iT_result.UID == inMondai.UID)
                {
                    inMondai.Result = iT_result;
                    bYa = true;
                    break;
                }
            }

            if (!bYa)
            {
                XmlNode xml_list_result = m_XML.xml_doc.SelectSingleNode("score_list");

                MondaiResult new_result = new MondaiResult();
                new_result.CreateXmlNode(xml_list_result);

                new_result.UID = inMondai.UID;
                inMondai.Result = new_result; 
            }
        }
    }
}
